from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class BlockedIPSMiddleware(MiddlewareMixin):
    '''中间件类'''
    EXCLUDE_IPS = ['127.0.0.1']
    def process_view(self,request,view_func,*view_arg,**view_kwargs):
        '''视图函数调用之前会调用'''
        user_ip=request.META['REMOTE_ADDR'] #获取浏览器端的ip地址
        if user_ip in BlockedIPSMiddleware.EXCLUDE_IPS:
            return HttpResponse('<h1>Forbidden</h1>')

class TestMiddleware():
    '''中间件类'''
    def __init__(self):
        '''服务器重启之后接受第一个请求时候调用'''
        print('__init__')

    def process_request(self,request):
        '''产生request之后,url匹配之前调用'''
        print('process_request中间件函数')

    def process_view(self,request,view_func,*view_args,**view_kwargs):
        '''url匹配之后,视图函数调用之前'''
        print('process_view')

    def process_response(self,request, response):
        '''视图函数调用之后，内容返回浏览器之前'''
        print('process_response')
        return response

class ExceptionTestMiddleware(MiddlewareMixin):
    # 如果注册多个process_exception函数，那么函数的执行顺序与注册的顺序相反。(其他中间件函数与注册顺序一致)
    # 中间件函数，用到哪个就写哪个，不需要写所有的中间件函数。
    def process_exception(self, request, exception):
        '''视图函数发生异常时调用'''
        print('----process_exception1----')
        print(exception)
